/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:   IAS模块  
  Function List:     
  History:
    <wangmc -- 2015-12-1>  创建
*******************************************************************************/ 
#ifndef IAS_H
#define IAS_H

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
 =============================================================================*/

/*=============================================================================
                               Macro Definition
 =============================================================================*/ 
#define IAS_EVEN_NUM            8              /* 最大事件个数 */


/*=============================================================================
                        Local Structures and Typedef 
 =============================================================================*/
/* 音频分析数据格式 */
typedef struct
{
    int		dataLen;		/* 音频流数据长度 */
	int		bitWidth;		/* 音频流数据位宽 */
	int	    samplerate;		/* 音频流数据采样率 */
	int	    channel;		/* 音频流数据通道数 */
} IAS_formatPrm_t;
 
/* 算法初始化参数 */
typedef struct
{
    unsigned int channel;                       /* 通道号 */
    unsigned int  serviceTypeMask;              /* 算法类型 */
} IAS_createParam_t;

/* 音频流数据 */
typedef struct
{
    char *pData;                            /* 音频流数据缓存 */
	int  dataLen;							/* 音频数据长度 */
} IAS_frameInfo_t;

/* 事件数据 */
typedef struct
{
    unsigned int         eventNumber;                      /* 事件个数 */
    AudioAnalyseEvent    eventList[IAS_EVEN_NUM];          /* 事件列表 */
} IAS_event_t;

/* 音频分析结果 */
typedef struct
{
    IAS_event_t             iasEvent;                      /*事件数据*/
} IAS_result_t;

/*=============================================================================
                             Extern Variables                                  
=============================================================================*/


/*=============================================================================
                             Local Variables                                  
 =============================================================================*/


/*=============================================================================
                             Function Definition                                  
 =============================================================================*/

/*******************************************************************************
  Function:     IAS_Create
  Description:  初始化算法，分配算法内存
  Input:        - pCreateParam: 智能算法初始化参数
  Output:       无
  Return:       !NULL: IVS算法句柄
                NULL: 操作失败
  Others:       无
*******************************************************************************/
void *IAS_Create(IAS_createParam_t *pCreateParam);

/*******************************************************************************
  Function:     IAS_Destory
  Description:  算法注销
  Input:        - hIas: IVS算法句柄
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IAS_Destory(void *hIas);

/*******************************************************************************
  Function:     IAS_SetFormat
  Description:  设置智能分析格式
  Input:        - hIas: IVS算法句柄
                - pFormat: 智能分析格式参数
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IAS_SetFormat(void *hIas,
                  IAS_formatPrm_t *pFormat);

/*******************************************************************************
  Function:     IAS_SetRuleConfig
  Description:  设置智能分析参数
  Input:        - hIas: IVS算法句柄
                  - configNum: pRuleConfig指向的参数数组的个数
                - pRuleConfig: 智能分析参数
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IAS_SetRuleConfig(void *hIas, 
                      unsigned int configNum, 
                      AudioAnalyseRuleConfig *pRuleConfig);

/*******************************************************************************
  Function:     IAS_GetResult
  Description:  获取智能算法结果
  Input:        - hIas: IVS算法句柄
                - pIasFrame: 算法处理的帧数据
                - pDynamicParam: 动态配置参数
                - pIasResult: 智能算法结果
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IAS_GetResult(void *hIas,
                  IAS_frameInfo_t *pIasFrame,
                  IAS_result_t *pIasResult);
                  
/*******************************************************************************
  Function:     IAS_ReleaseResult
  Description:  释放事件缓存
  Input:        - hIas: IVS算法句柄
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IAS_ReleaseResult(void *hIas);

#ifdef __cplusplus
}
#endif

#endif /* IAS_H */
